package ma;

import android.content.Context;
import android.support.v4.app.Fragment;
import android.view.View;
import android.view.ViewGroup;

/**
 * A simple {@link Fragment} subclass.
 * Fragment中默认是不会持有Activity的引用的
 */
public class EmptyFragment extends Fragment {
  //private Activity mActivity;

  public EmptyFragment() {
    // Required empty public constructor
  }

  @Override public void onAttach(Context context) {
    super.onAttach(context);
    //this.mActivity = (Activity) context;

    new Thread(new Runnable() {
      @Override public void run() {
        while (true) {
          // fixme Activity销毁后，这里就会出问题了
          // 这里只是getActivity()，并没有持有Activity的引用，所以Activity会正常销毁，Fragment也会正常销毁，但线程不会终止，
          // Activity销毁后，getActivity()就为null了，所以就会NullPointerException crash
          getActivity().getPackageName();

          // 如果这里持有Activity的引用，就不会崩溃。但是会导致Activity无法正常释放，造成内存泄漏
          //mActivity.getPackageName();
        }
      }
    }).start();
  }

  private int realDeep = 0;

  /**
   * 计算一个view的嵌套层级
   */
  public void getNum(View view, int deep) {
    if (view instanceof ViewGroup) {
      for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
        getNum(((ViewGroup) view).getChildAt(i), deep++);
      }
    } else {
      realDeep = Math.max(realDeep, deep);
    }
  }
}
